function maximumElementAfterDecrementingAndRearranging(arr: number[]): number {
    let n = arr.length;
    let map: number[] = new Array(n+1).fill(0);
    arr.forEach( e => {
        if(e<n){
            map[e-1]++;
        }
        else{
            map[n]++;
        }
    });
    let i=0;
    let owe = 0;
    while(i<n){
        if(map[i] === 0){
            owe++;
        }
        else if(map[i]>1){
            owe-=(map[i]-1);
            owe = owe <0 ? 0:owe;
        }
        i++;
    }
    owe -= map[n];
    return n-owe;
};


// 添加备注

// 执行用时：
// 88 ms
// , 在所有 TypeScript 提交中击败了
// 100.00%
// 的用户
// 内存消耗：
// 48.9 MB
// , 在所有 TypeScript 提交中击败了
// 25.00%
// 的用户